home *** CD-ROM | disk | FTP | other *** search
- Path: solon.com!not-for-mail
- From: ig25@mvmap66.ciw.uni-karlsruhe.de (Thomas Koenig)
- Newsgroups: comp.std.c,comp.lang.c.moderated
- Subject: Re: Help, best way to compare doubles
- Followup-To: comp.lang.c.moderated
- Date: 13 Jan 1996 11:53:29 -0600
- Organization: =?ISO-8859-1?Q?Universit=E4t_Karlsruhe_(TH),_Germany_?=
- Sender: clc@solutions.solon.com
- Approved: clc@solutions.solon.com
- Message-ID: <4d8rip$bk2@solutions.solon.com>
- References: <4d1k09$aqq@mercury.IntNet.net> <4d8i3o$pjb@info.uah.edu>
- Reply-To: Thomas.Koenig@ciw.uni-karlsruhe.de
- NNTP-Posting-Host: solutions.solon.com
-
- [ Followup-To: comp.lang.c.moderated ]
-
- In comp.std.c, gbacon@oreo (Greg Bacon) wrote:
- >Jeff Tomich (jtomich@IntNet.net) wrote:
- >: Having a hard time to figure out a function on how to compare doubles.
- >: Any ideas?
-
- >No function necessary.. C has this really cool boolean equality operator
- >that does this sort of thing for you. Have a look:
-
- [...]
-
- It is unwise to compare floating point numbers for equality without
- thinking hard first. Roundoff error means that mathematically
- equivalent expressions may yield different results for different
- orderings; for example, a+b+c may very well compare unequal to
- a+c+b (try this out with a=1.0, b=-1.0 and c=1.E-20, for example).
- Roundoff error can also mean that algorithms which should converge
- don't, so beware. (I even know one system where a/2*2 != a for one
- quarter of floating point numbers - no points for guessing it's
- a /370 :-)
-
- The correct way to compare two floating point numbers for "equality" to
- use fabs(a-b) < eps. The problem arises in determining what to use for
- eps, of course :-). What's reasonable depends very much on your problem
- and on the floating point characteristics of your system (for example,
- do your values span many orders of magnitude? Are they close to unity?
- Could they have opposing signs?), so it's really impossible to tell
- without a fairly thorough analysis.
- --
- Thomas Koenig, Thomas.Koenig@ciw.uni-karlsruhe.de, ig25@dkauni2.bitnet.
- The joy of engineering is to find a straight line on a double
- logarithmic diagram.
-